import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

// 电商购物平台登录窗体
public final class LoginFrame extends JFrame {
    // 用类声明对象，用jdk中swing包下的组件生成
    private JLabel l_username, l_type, l_password; // 第一类组件
    private JTextField t_username; // 用来输用户名
    private JComboBox<String> c_type; // 泛型化的组件
    private JPasswordField p_password;
    private JButton b_reset, b_login, b_register; // 按钮

    public LoginFrame() {
        this.setTitle("电商购物平台-登录"); // 页面运行起来 左上角的标题
        this.setSize(400, 300); // 宽 * 高
        this.setLocation(500, 250); // 在屏幕中央的位置
        initComponents();
        setupLayout();
        setupListeners();
        this.setVisible(true); // 可见性
    }

    private void initComponents() {
        l_username = new JLabel("用户名", JLabel.CENTER);
        l_type = new JLabel("用户类型", JLabel.CENTER);
        l_password = new JLabel("密码", JLabel.CENTER);

        t_username = new JTextField();
        c_type = new JComboBox<String>();
        c_type.addItem("普通用户"); // 下拉框拉下来出现的数据
        c_type.addItem("管理员");
        p_password = new JPasswordField();

        b_reset = new JButton("重置");
        b_login = new JButton("登录");
        b_register = new JButton("注册");
    }

    private void setupLayout() {
        this.setLayout(new GridBagLayout()); // 使用更灵活的GridBagLayout布局管理器
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new java.awt.Insets(5, 5, 5, 5);

        // 第一个面板用于输入信息
        JPanel p1 = new JPanel(new GridLayout(3, 2, 5, 5));
        p1.add(l_username);
        p1.add(t_username);
        p1.add(l_type);
        p1.add(c_type);
        p1.add(l_password);
        p1.add(p_password);

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1;
        gbc.weighty = 0.6;
        this.add(p1, gbc);

        // 第二个面板用于按钮操作
        JPanel p2 = new JPanel(new GridLayout(1, 3, 5, 5));
        p2.add(b_reset);
        p2.add(b_login);
        p2.add(b_register);

        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 1;
        gbc.weighty = 0.4;
        this.add(p2, gbc);
    }

    private void setupListeners() {
        b_login.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                QueryBookFrame queryBookFrame = new QueryBookFrame();
                queryBookFrame.setVisible(true);
            }
        });
        b_register.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new RegisterFrame();
            }
        });
    }

    public static void main(String[] args) {
        new LoginFrame();
    }
}
